#ifndef TOKEN
#error "You must define TOKEN macro before include this file"
#endif

// Keyword
TOKEN(TK_TYPEDEF,       "typedef")  // 类型定义
TOKEN(TK_NUM,           "num")      // 整数
TOKEN(TK_DECIMAL,       "decimal")  // 浮点数
TOKEN(TK_ENUM,          "enum")     // 枚举
TOKEN(TK_FIELD,         "field")    // 字段
TOKEN(TK_STRUCT,        "struct")   // 组合体
TOKEN(TK_CHOSE,         "chose")    // 选择
TOKEN(TK_SIGN,          "sign")     // 有符号(整数)
TOKEN(TK_UNSIGN,        "unsign")   // 无符号(整数)
TOKEN(TK_BIG,           "big")      // 大端在前
TOKEN(TK_LITTLE,        "little")   // 小端在前
TOKEN(TK_ALIGN,         "align")    // 对齐(Byte)
TOKEN(TK_SIZE,          "size")     // 类型大小(Bit)
TOKEN(TK_LEN,           "len")      // 结构大小(Byte)
TOKEN(TK_POS,           "pos")      // 偏移地址
TOKEN(TK_WHEN,          "when")     // 判断
TOKEN(TK_ENCODE,        "encode")   // 编码函数
TOKEN(TK_DECODE,        "decode")   // 解码函数
TOKEN(TK_PRINT,         "print")    // 打印函数
TOKEN(TK_EXPORT,        "export")   // 导出变量
TOKEN(TK_IMPORT,        "import")   // 引用文件
TOKEN(TK_COMPILE,       "compile")  // 引用其他编译语言

// Primary
TOKEN(TK_ID,            "identifier")//标识符
TOKEN(TK_INTEGER,       "integer")  // 整数常数
TOKEN(TK_FLOAT,         "float")    // 浮点数常数
TOKEN(TK_PAREN,         "(...)")    // 小括号表达式
TOKEN(TK_BRACE,         "{...}")    // 大括号语句

// operators
TOKEN(TK_COMMA,         ",")
TOKEN(TK_COLON,         ":")
TOKEN(TK_LPAREN,        "(")
TOKEN(TK_RPAREN,        ")")
TOKEN(TK_LBRACKET,      "[")
TOKEN(TK_RBRACKET,      "]")
TOKEN(TK_LBRACE,        "{")
TOKEN(TK_RBRACE,        "}")
TOKEN(TK_SEMICOLON,     ";")

TOKEN(TK_END,           "EOF")
